#include "txtprocessor.h"
#include <QFile>
#include <QDebug>
#include <QDir>
#include <QTextStream>

bool TxtProcessor::processTextToSrt(const QString& inputPath, const QString& outputPath, const QStringList& keywords) {
    try {
        // 读取TXT文件
        QFile inputFile(inputPath);
        if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
            qDebug() << "无法打开输入文件:" << inputPath;
            return false;
        }

        // 确保输出目录存在
        QDir().mkpath(QFileInfo(outputPath).path());

        // 打开输出文件
        QFile outputFile(outputPath);
        if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
            qDebug() << "无法创建输出文件:" << outputPath;
            return false;
        }

        QTextStream in(&inputFile);
        QTextStream out(&outputFile);
        int index = 1;  // SRT序号

        // 如果没有关键词，则提取所有内容
        bool extractAll = keywords.isEmpty();
        if (extractAll) {
            qDebug() << "未指定关键词，将处理所有内容";
        } else {
            qDebug() << "使用关键词:" << keywords;
        }

        // 逐行读取并处理
        while (!in.atEnd()) {
            QString line = in.readLine().trimmed();
            
            // 跳过空行
            if (line.isEmpty()) {
                continue;
            }

            // 检查是否包含特定字符串
            bool containsKeyword = extractAll;  // 如果没有关键词，默认为true
            if (!extractAll) {
                for (const QString& keyword : keywords) {
                    if (line.contains(keyword)) {
                        containsKeyword = true;
                        qDebug() << "找到包含关键词" << keyword << "的内容:" << line;
                        break;
                    }
                }
            }

            // 如果不包含特定字符串，跳过这一行
            if (!containsKeyword) {
                continue;
            }

            // 处理长文本
            QStringList splitLines = splitLongText(line);
            
            // 写入SRT格式
            for (const QString& splitLine : splitLines) {
                out << index << "\n";
                out << "00:00:00,000 --> 00:00:01,000\n";
                out << splitLine << "\n\n";
                index++;
            }
        }

        inputFile.close();
        outputFile.close();

        qDebug() << "TXT文件处理完成，已保存到:" << outputPath;
        qDebug() << "共处理" << (index - 1) << "条记录";
        return true;
    } catch (const std::exception& e) {
        qDebug() << "处理TXT文件时发生错误:" << e.what();
        return false;
    }
}

QStringList TxtProcessor::splitLongText(const QString& text) {
    QStringList result;
    
    // 如果文本长度小于maxLength，直接返回
    if (text.length() <= m_maxLength) {
        result.append(text);
        return result;
    }

    // 分割长文本
    int startPos = 0;
    while (startPos < text.length()) {
        // 如果剩余文本长度小于maxLength，直接添加剩余部分
        if (text.length() - startPos <= m_maxLength) {
            result.append(text.mid(startPos));
            break;
        }

        // 在maxLength字符后查找最近的句号
        int endPos = startPos + m_maxLength;
        int dotPos = text.indexOf("。", endPos);
        
        // 如果找到了句号
        if (dotPos != -1) {
            // 计算分割后剩余部分的长度
            int remainingLength = text.length() - (dotPos + 1);
            
            // 如果分割后剩余部分长度小于minLength，则不在此处分割
            if (remainingLength < m_minLength) {
                qDebug() << "分割后剩余长度小于" << m_minLength << "个字符，不进行分割";
                result.append(text.mid(startPos));
                break;
            }
            
            // 包含句号在内的文本
            result.append(text.mid(startPos, dotPos - startPos + 1));
            startPos = dotPos + 1;
        } else {
            // 如果找不到句号，则使用maxLength字符作为分割点
            result.append(text.mid(startPos, m_maxLength));
            startPos += m_maxLength;
        }
    }

    return result;
} 